#ifndef PERSONNAGE_PRIVATE_H_
#define PERSONNAGE_PRIVATE_H_

#include "Personnage.h"

/**
 * \struct _Personnage
 * \brief Définie la structure interne d'un personnage
 */
struct _Personnage {
	int exp;				/*< Experience */
	int vie;				/*< Vie */
	int freezed;			/*< Variable indiquant pour combien de tours le personnage est bloqué */
	Pouvoir* pouvoir;		/*< Pouvoir */
	Case* c;				/*< Case sur laquelle se trouve le personnage */
	Joueur* joueur;			/*< Joueur à qui appartient le personnage */
	
/***************************
 * Héritage
 */
	TypePerso type; 		/*< Type de la classe qui hérite de celle-ci */
	void* ext; 				/*< données étebdues propre à la classe qui hérite celle-ci */
	/* virtual methods  */
	const char* (* getTypeNom)(Personnage* perso);
	int (* attaquer)(Personnage* perso,Personnage* ennemi);
	void (* free)(Personnage* perso);
};

/**
 * \fn Personnage* newPersonnage(int exp,int vie,Pouvoir* pouvoir,Case* c,Joueur* joueur);
 * 
 * \brief Créer un nouveau personnage
 * 
 * \param exp Eperience du personnage
 * \param vie Vie du personnage
 * \param pouvoir Pouvoir du personnage (peut être NULL => pas de pouvoir)
 * \param c Case sur laquelle se trouve le personnage (peut être NULL)
 * \param joueur Joueur à qui appartient le personnage
 * 
 * \return un nouveau personnage
 */
Personnage* newPersonnage(int exp,int vie,Pouvoir* pouvoir,Case* c,Joueur* joueur);

/* Getters */
void* persoGetExt(Personnage* perso);

/* Settlers */
void persoSetExt(Personnage* perso,void* ext);
void persoSetType(Personnage* perso,TypePerso type);

#endif /*PERSONNAGE_PRIVATE_H_*/
